﻿import type { RequestOptions } from '@@/plugin-request/request';
import {history, RequestConfig} from '@umijs/max';
import { message } from 'antd';
import {extend} from "umi-request";

const loginPath = '/user/login';
// 错误处理方案： 错误类型
// enum ErrorShowType {
//   SILENT = 0,
//   WARN_MESSAGE = 1,
//   ERROR_MESSAGE = 2,
//   NOTIFICATION = 3,
//   REDIRECT = 40010,
// }
// 与后端约定的响应数据格式
interface ResponseStructure {
  data: any;
  code?: number;
  msg?: string;
  description?: string;
}

/**
 * @name 错误处理
 * pro 自带的错误处理， 可以在这里做自己的改动
 * @doc https://umijs.org/docs/max/request#配置
 */
export const errorConfig: RequestConfig = {
  // 错误处理： umi@3 的错误处理方案。
  errorConfig: {
    // 错误抛出
    errorThrower: () => {

    },
    // 错误接收及处理
    errorHandler: (error: any) => {
      message.error(error.message)

    },
  },

  // 请求拦截器
  requestInterceptors: [
    (config: RequestOptions) => {
      // 拦截请求配置，进行个性化处理。
      const url = config?.url?.concat('?token = 123');
      return { ...config, url };
    },
  ],

  // 响应拦截器
  responseInterceptors: [
    (response) => {
      // 拦截响应数据，进行个性化处理
      const { data } = response as unknown as ResponseStructure;
      if (data?.code === 40010) {
        history.push(loginPath);
        const  error: any = new Error(data.description);
        throw error
      }
      if (data?.code !== 0) {
        const  error: any = new Error(data.description);
        throw error
      }

      return data;
    },
  ],
};


const request = extend(
  {
    prefix:process.env.NODE_ENV==='production'?'https://www.code-nav.cn/':"undefined",
  }

)
export default  request;
